/****************************************Copyright (c)****************************************************

**--------------File Info---------------------------------------------------------------------------------
** File name:                pid.h
** Last modified Date:       2024.11.16
** Last Version:             Ver:1.0
** Descriptions:             PID控制驱动
**
**--------------------------------------------------------------------------------------------------------
** Created by:               adm
** Created date:             2024.11.15
** Version:                  Ver:1.0
** Descriptions:
**--------------------------------------------------------------------------------------------------------*/
/**
驱动用法：
1、初始化PID参数
    PID_Init(&mypid, 10, 1, 5, 800, 1000); //初始化PID参数

2、获取目标值和测量值
    float feedbackValue = ...; //这里获取到被控对象的反馈值
    float targetValue = ...; //这里获取到目标值

3、进行一次PID计算
    PID_Calc(&mypid, targetValue, feedbackValue); //进行PID计算，结果在output成员变量中

4、根据计算结果进行控制输出
    设定执行器输出大小(mypid.output);
*/
#ifndef PID_H
#define PID_H

//#include "at32f415_wk_config.h"


//首先定义PID结构体用于存放一个PID的数据
typedef struct {
    float kp, ki, kd; //三个系数
    float error, lastError; //误差、上次误差
    float integral, maxIntegral; //积分、积分限幅
    float output, maxOutput; //输出、输出限幅
} PID;


extern PID mypid;

/**************************API****************************/
void PID_Init(PID *pid, float p, float i, float d, float maxI, float maxOut);
void PID_Calc(PID *pid, float reference, float feedback);


#endif
